/*
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
下面是有关于质数的算法


 */


//demo:判断一个数是否是质数，如果是则返回true,否则返回false
function isPrime(num){
    //凡是不是number类型的全部返回false
    if(typeof num !== "number"){
        return false
    }
    if (num == 2) {
        return true;
    }else if(num>2){
        var len = Math.ceil(Math.sqrt(num))
        for (var i = 2; i <= len; i++) {
            if (num % i === 0) {
                return false;
            }
        }
        return true;
    }else{
        return false
    }
}


var prime = isPrime(17)
console.log(prime);




//demo:给定一个数，返回小于或者等于该数的所有质数
function getPrimes(num) {
    if(typeof num !== "number"){
        return []
    }else {
        var primes = []
        for(var i=0;i<=num;i++){
            if(isPrime(i)){
                primes.push(i)
            }
        }
        return primes
    }


}

var primes = getPrimes(10)
console.log('primes: ',primes);





//demo3:求小于等于给定数值的质数之和。
function sumPrimes(num) {
    var sum = 0;
    for(var i=0;i<=num;i++){
        if(isPrime(i)){
            sum += i
        }
    }
    return sum;
}
console.log(sumPrimes(10)); // 17
console.log(sumPrimes(977)); // 73156
